package dbLayer;

import java.sql.*;

public class DBConnection {
	
	private static final String  driver = "jdbc:sqlserver://Balder.ucn.dk:1433";
   	private static final String  databaseName = "; databaseName = dmaa0214TemaP_6";
    private static String  userName = "; user = dmaa0214TemaP_6";
    private static String password = "; password = Biksemad";
    private DatabaseMetaData dma;
    private static Connection con;
    private static DBConnection  instance;

    private DBConnection() throws NullPointerException {
    	
    	String url = driver + databaseName + userName + password;
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            System.out.println("Load af class ok");          
        }
        catch(Exception e) {
            System.out.println("Cannot find the driver");
            System.out.println(e.getMessage());
        }
        try {
            con = DriverManager.getConnection(url);
            con.setAutoCommit(true);
            dma = con.getMetaData();
            System.out.println("Connection to " + dma.getURL());
            System.out.println("Driver " + dma.getDriverName());
            System.out.println("Database product name " + dma.getDatabaseProductName());
        }
        catch(Exception e) {      	
            System.out.println("Problems with the connection to the database");
            System.out.println(e.getMessage());
            System.out.println(url);
            throw new NullPointerException("Error DBConnection");
           
        }
    }
	   
    public static void closeConnection() {

    	try {
            con.close();
            System.out.println("The connection is closed");
        }
         catch (Exception e){
            System.out.println("Error trying to close the database " +  e.getMessage());
         }
    }
		
    public  Connection getDBcon() 
    {
       return con;
       
    }

    public static DBConnection getInstance() {
    	
    	if (instance == null) { 
        	try {
        		instance = new DBConnection();
        	}
        	catch(NullPointerException e) { 
        		System.out.println(e.getMessage());
        		instance = null;
        	}
    	}    
    	return instance;
    }
 
    public static void startTransaction() { 
    	
    	try{
    		con.setAutoCommit(false);
        }
    	catch(Exception e) {
    		System.out.println("fejl start transaction");
    		System.out.println(e.getMessage());
    	}
    }

    public static void commitTransaction() { 
    	try{
    		con.setAutoCommit(true);
        }
    	catch(Exception e) {
    		System.out.println("fejl commit transaction");
    		System.out.println(e.getMessage());
    	}
    }

    public static void rollbackTransaction() { 
    	try{
    		con.rollback();
    		con.setAutoCommit(true);
        }
    	catch(Exception e) {
    		System.out.println("fejl rollback transaction");
    		System.out.println(e.getMessage());
    	}
    }
    
}
